<?php

namespace Unl\HomologacionBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\ExecutionContext;

/**
* @ORM\Entity(repositoryClass="Unl\HomologacionBundle\Repository\ModuloRepository")
* @Assert\Callback(methods={"esNivelValido"})
*/
class Modulo
{
    /**
    * @ORM\Id
    * @ORM\Column(type="bigint")
    * @ORM\GeneratedValue(strategy="AUTO")
    */
    protected $id;

    /**
    * @ORM\Column(type="integer")
    * @Assert\Type(type="integer", message="El valor {{ value }} no es un {{ type }} válido.")
    * @Assert\NotBlank(message = "Debe ingresar el numero de Nivel.")
    */
    protected $numeroModulo;


    /**
    * @ORM\ManyToOne(targetEntity="MallaCurricular", inversedBy="modulos")
    * @ORM\JoinColumn(name="mallaCurricular_id", referencedColumnName="id")
    */
    protected $mallaCurricular;


    /**
    * @ORM\OneToMany(targetEntity="Unidad", mappedBy="Modulo", cascade={"all"}, orphanRemoval=true)
    */
    protected $Unidades;


    public function __construct()
    {
        $this->Unidades = new \Doctrine\Common\Collections\ArrayCollection();
    }
    
    /**
     * Get id
     *
     * @return bigint 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set numeroModulo
     *
     * @param integer $numeroModulo
     */
    public function setNumeroModulo($numeroModulo)
    {
        $this->numeroModulo = $numeroModulo;
    }

    /**
     * Get numeroModulo
     *
     * @return integer 
     */
    public function getNumeroModulo()
    {
        return $this->numeroModulo;
    }

    /**
     * Set mallaCurricular
     *
     * @param Unl\HomologacionBundle\Entity\MallaCurricular $mallaCurricular
     */
    public function setMallaCurricular($mallaCurricular)
    {
        $this->mallaCurricular = $mallaCurricular;
    }

    /**
     * Get mallaCurricular
     *
     * @return Unl\HomologacionBundle\Entity\MallaCurricular 
     */
    public function getMallaCurricular()
    {
        return $this->mallaCurricular;
    }

    /**
     * Add Unidades
     *
     * @param Unl\HomologacionBundle\Entity\Unidad $unidades
     */
    public function addUnidad(\Unl\HomologacionBundle\Entity\Unidad $unidad)
    {
        $this->unidades->add($unidad);
        $unidad->setModulo($this);
      
    }
    
    public function setUnidades($unidades)
    {
        foreach ($unidades as $unidad) {
            $unidad->setModulo($this);
        }
        $this->unidades = $unidades;
    }

    /**
     * Get Unidades
     *
     * @return Doctrine\Common\Collections\Collection 
     */
    public function getUnidades()
    {
        return $this->Unidades;
    }

    public function __toString()
    {
        return ''.$this->numeroModulo;
    }

    public function esNivelValido(ExecutionContext $context){
         if (empty($this->numeroModulo)) {
           $context->addViolation('Número de Nivel no puede ser blanco', array(), null);
           return false;   
        }
        return true;
    }
    
    
    
}